import os

# getcwd()作用是获取当前工作目录
path = os.getcwd()
print(path)
filename = path + '/test3.txt'
# r+与w+的区别在于，r+可以读写不能创建文件，w+只能写
f = open(filename, mode='r+', encoding='utf-8')# 绝对路径
# writelines写入列表，此方法不会覆盖之前的内容，而是追加
# write()写入字符串，此方法会覆盖之前的内容
f.write('hhhhhhhhhhhhhhhhhhh')
context = f.read(8)
print(context)
# readlines()	读取所有行并返回列表
context1 = f.readlines()
# 在这个例子中，首先使用write()方法向文件中写入了一段字符串，
# 然后使用read()方法读取了整个文件的内容，并将其赋值给变量context。
# 接下来，再次使用read()方法尝试读取文件内容时，由于文件指针已经移动到了文件末尾，
# 所以没有内容可以读取，导致context为空。最后，使用readlines()方法读取文件内容，
# 但由于文件指针已经移动到了文件末尾，所以也没有内容可以读取，导致context1为空。
#
print(context1)
f.close()


# 打开文件，如果文件不存在则创建
file = open("te.txt", "w+")
# 写入数据
file.write("Hello, World!")
# 获取当前文件指针的位置
print("Current file position: ", file.tell())
# 将文件指针移动到文件开头
file.seek(0, 0)
# 读取数据
data = file.read()
print("Read data: ", data)
# 关闭文件
file.close()

print("-"*30)
# 1、解释说明
#
# `seek()`是Python中文件对象（file object）的一个方法，用于改变文件的当前读写位置。
# 在对文件进行读写操作时，我们通常需要定位到文件的某个特定位置。
# `seek()`方法可以帮助我们实现这个功能。它有两个参数：`offset`和`whence`。
# `offset`表示偏移量，`whence`表示相对于哪个位置进行偏移。
# `whence`有三个取值：0表示从文件开头开始偏移，1表示从当前位置开始偏移，2表示从文件结尾开始偏移。
#
# 2、使用示例
#
# ```python
# # 打开一个文件
with open("te.txt", "r") as f:
    # 将文件指针移动到距离文件开头10个字节的位置
    f.seek(4, 0)
    # 从当前位置读取5个字节
    data = f.read(5)
    print(data)
# ```
#
# 3、注意事项
#
# - `seek()`方法只适用于二进制模式（"rb"或"wb"）和文本模式（"r"或"w"）下的文件对象。
# - 如果`seek()`方法的参数不正确，可能会引发`OSError`异常。
# - 在使用`seek()`方法后，再次进行读写操作时，需要确保操作的起始位置是正确的。否则可能会导致数据错误或丢失。
# - 在关闭文件之前，不需要手动调用`seek()`方法将文件指针移回文件开头。因为在关闭文件时，Python会自动将文件指针移回文件开头。


